<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>symbol</title>
</head>
<body>
  <script>
    //创建Symbol
    let s = Symbol()
    // console.log(s, typeof s);
    let s2 = Symbol('尚硅谷')     // s2不等于s3
    let s3 = Symbol('尚硅谷')
    //Symbol.for 创建
    let s4 = Symbol.for('尚硅谷')    // s4等于s5
    let s5 = Symbol.for('尚硅谷')

    //不能与其他数据进行运算
    //    let result = s + 100;
    //    let result = s > 100;
    //    let result = s + s;

    // 七种数据类型
    // USONB  you are so niubility
    // u  undefined
    // s  string  symbol
    // o  object
    // n  null number
    // b  boolean

    /**
     * Symbol 值作为对象属性名时，不能用点运算符。在对象的内部，使用 Symbol 值定义属性时，Symbol 值必须放在方括号之中。
     * */


    /**
     * Symbol.for()与Symbol()这两种写法，都会生成新的 Symbol。它们的区别是，前者会被登记在全局环境中供搜索，后者不会。Symbol.for()不会每次调用就返回一个新的 Symbol 类型的值，而是会先检查给定的key是否已经存在，如果不存在才会新建一个值。比如，如果你调用Symbol.for("cat")30 次，每次都会返回同一个 Symbol 值，但是调用Symbol("cat")30 次，会返回 30 个不同的 Symbol 值。
     */

    /**
     * Symbol.for("bar") === Symbol.for("bar")
     *     // true
     *
     *     Symbol("bar") === Symbol("bar")
     *     // false
     */
  </script>
</body>
</html>